package com.sptpc.demo.controller;

import com.sptpc.demo.global.response.GlobalResponse;
import com.sptpc.demo.model.Category;
import com.sptpc.demo.service.ICategoryService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;

@Slf4j
@RestController
@RequestMapping("/category")
public class CategoryController {
    @Autowired
    public ICategoryService categoryService;

    /**
     * 查询所有
     * @return
     */
//    @GetMapping("/")
//    public List<Category> getAll() {
//        return categoryService.getAllCategories();
//    }

    @GetMapping("/")
    public GlobalResponse getAll1() {
        return GlobalResponse
                .success( categoryService.getAllCategories());
    }
    /**
     * 新建
     */
    @PostMapping("/")
    public Category addNewDrink(@RequestBody @Valid Category category,
                             BindingResult bindingResult) {
        if (bindingResult.hasErrors()) {
            for (ObjectError error : bindingResult.getAllErrors()) {
                log.error(error.toString());
            }
            return null;
        } else {
            log.info("新增分类：{}", category);
            categoryService.addNewCategory(category);
            return category;
        }
    }

    // put /category/
//    修改分类
    @PutMapping("/")
    public Category modifyCategory(@RequestBody Category request) {
        log.info("要修改的分类：{}", request);

        // 1、通过id查询出分类
        Category category = categoryService.getCategoryById(request.getId());
        // 2、复制前端要修改的属性
        BeanUtils.copyProperties(request, category);
        // 3、更新数据库
        categoryService.updateCategory(category);

        return category;
    }

    @DeleteMapping("/{id}")
    public String deleteCategory(@PathVariable Long id) {
        log.info("要删除的分类id：{}", id);
        categoryService.deleteCategoryById(id);
        return "删除操作成功";
    }
}
